<?php

namespace App\Http\Controllers;

use Houdunwang\WeChat\WeChat;
use Illuminate\Http\Request;
use Modules\Wx\Entities\WeConfig;
use Modules\Wx\Entities\WxConfig;
use Modules\Wx\Entities\WxKeywords;
use Modules\Wx\Entities\WxRule;

class WechatController extends Controller
{
    public function __construct()
    {
        $this->valid();
    }

    public function handle(WeConfig $weConfig)
    {

//        //测试接收微信消息
        $instance = WeChat::instance('message');

        //关注用户扫描二维码事件
        if ($instance->isTextMsg()) {
            $message = $instance->Content;

            //通过用户发来的文字内容找到对应的关键词数据,如果能找到,就再找到对应模块来处理,如果找不到,就应该回复默认回复
            return $this->respons($message);
        }
        //菜单推送事件
        $instance = WeChat::instance('button');
        //关注用户扫描二维码事件
        if ($instance->isClickEvent()) {
            //获取消息内容
            $message = $instance->getMessage();

            return $this->respons($message->EventKey);
        }

    }

    public function respons($message)
    {
        if ($keyword = WxKeywords::where('key', $message)->first()) {
            //找规则数据
            $rule = WxRule::find($keyword['rule_id']);
            //组合需要调用的类
            $class = "\Modules\\".$rule['module']."\\Respons";
            //通过回调方法找到对应类的对应方法来处理微信回复
            return call_user_func_array([new $class, 'handle'], [$rule]);
        }

    }


    protected function valid()
    {
        //获取wechat.php配置文件的内容
        $config = include base_path('config').'/wechat.php';
        //获取数据库中的微信配置数据
        $wxconfig = WeConfig::pluck('value', 'name')->toArray();
        //将2个数组合并
        $config = array_merge($config, $wxconfig);
        WeChat::config($config)->valid();
    }
}
